﻿using System;
using System.Collections.Generic;
using System.Text;
using Mighty.Common;

namespace Mighty.Brain 
{
    public class SelimBrain : BasicBrain
    {
        public override void GameStartEvent()
        {
        }

        //public override void BettingReadyEvent()
        //{
        //    int i;
        //    ArrayList handcard0 = new ArrayList(); 
        //    ArrayList handcard1 = new ArrayList();
        //    ArrayList handcard2 = new ArrayList();
        //    ArrayList handcard3 = new ArrayList();
        //    ArrayList handcard4 = new ArrayList();
      
        //    int s0, s1, s2, s3;

        //    for(i = 1; i < 10; i++)
        //    {   
        //        switch(gameInfo.myCards[i].shape)
        //        {
        //            case 0:
        //                s0 = 0;
        //                while(s0 <= handcard0.Count)
        //                {
        //                    if(handcard0.Count == 0)
        //                        handcard0.add();                        
        //                    else if(gameInfo.myCards[i].number < (gameInfo.myCards)handcard0.number)
        //                        s0++;
        //                    else if(s0 == handcard0.Count)
        //                    {
        //                        handcard0.add();
        //                        S0 = handcard0.Count + 1;
        //                    }
        //                    else 
        //                    {
        //                        handcard0.Insert();
        //                        S0 = handcard0.Count + 1;
        //                    }
        //                }
        //                break;
        //            case 1:
        //                handcard1.Insert();
        //            case 2:
        //                handcard2.
                    
            
        //    /* 	
        //     HandedCard[] myCards;
        //      소팅한다. 왼쪽부터 오름차순
        //    switch()
        //    {
        //        한 무늬가 4장이고 기루다 무늬가 그림이 2장 또는 3장 - 3
        //        한 무늬가 4장이고 기루다 무늬가 그림이 4장 - 4
        //        한 무늬가 5장이면 그림 없으면 3 
        //        한 무늬가 5장이고 그림이 한 장 또는 두 장 있으면 - 4
        //        한 무늬가 5장이고 그림이 세 장+ 있으면 - 5+  
        //        한 무늬가 6장이고 그림 + - 4 +
        //        한 무늬가 7장이고 그림 + - 5 +
        //        마이티가 있다면 +1
        //        조커가 있다면 +1
        //        마이티무늬 K 혹은 에이스가 있다면 +1 
        //    }
        //     */
        //}
        public override Betting BettingTicEvent()
        {/*
          * Betting[] bettingHistory;  
          * 3판 이상이길 수 있을 때부터 13
	            +                        +
          */
            Betting betting = new Betting();

            betting.isPass = true;
            if (gameInfo.betting.limit > 0)
            {
                Betting previousBetting = (Betting)gameInfo.bettingHistory[gameInfo.bettingHistory.Count - 1];
                if (previousBetting.limit < 15)
                {
                    betting.isPass = false;
                    betting.giruda = Giruda.NoGiruda;
                    betting.limit++;
                }
            }
            return betting;
        }
        public override void BettingCompleteEvent()
        {

        }

        public override HandedCard[] ChoiceCardEvent()
        {
            /*	HandedCard[] myCards;	// 3장의 카드를 버린다
	        기루다와 마이티와 조커를 제외하고
	        if(첫판에 윈카드가 있을 경우 - 마이티 무늬의 k나 기루다를 제외한 A가 있을 때)
		         가장 적은 무늬를 모두 버린다.
	        else(첫판에 윈카드가 없을 경우)
		        3장이상을 갖고있는 무늬의 그림카드가  
		        K나 Q를 갖고 있지 않은 무늬의 그림개수가 두개 이상이고 숫자가 있다면 그림을 모두버린다. 
             */ 

            for (int i = 10; i <= 12; i++)
            {
                gameInfo.myCards[i].cmdRemove = true;
            }
            return gameInfo.myCards;
        }
        public override FriendPlayer ChoiceFriendEvent()
        {
            /*	FriendPlayer friend; 
	        if(마이티가 없다면) 마이티 선택
	        else if (조커가 없다면) 조커 선택
	        else if(조커콜을 묻지 않았다면) 조커콜 선택
	        else if(A를 다 가지고 있다면) 노프랜드
	        else 초구 프랜드 선택	
             */
            gameInfo.friend.howToSelect = FriendPlayer.HowToSelect.firstwin;
            return gameInfo.friend;
        }

        public override void RoundReadyEvent()
        {

        }
        public override HandedCard RoundTicEvent()
        {
            /*	RoundCard[] roundCards;
	        if(선일 경우)
		        if(공격수라면)
			        if(첫판이라면) 
			        {
				        기루다나 마이티나 조커가 아닌카드중
				        A가 있다면 내고 
				        마이티 무늬의 K가 있다면 내고
				        한 장있는 숫자카드를 낸다.
			        }
			        else(첫판이 아니라면)
			        {	
				        조커를 갖고있다면 기루다 무늬로 조커를 낸다.
				        기루다가 3장 이상이면 가장 높은 카드를 낸다.
				        한개의 무늬가 있다면 낸다.
				        A를 갖고 있다면 낸다.			
				        기루다가 2장이면 그림이 아닌 카드를 낸다.	
				        기루다가 아닌 무늬의 가장 낮은 카드를 낸다.  			
			        }
		        else(수비수라면)
			        if(프랜드가 밝혀지지 않았다면)
				        if(프랜드가 조커라면) 조커콜을 낸다.
				        else 프랜드의 무늬의 제일작은 그림을 낸다.
			        else (프랜드가 밝혀졌다면)    
			        {
				        기루다 빼고 6라운드까지는 가장적은 무늬의 10부터 그림카드를 낸다.
				        기루다 무늬를 낸다.
			        }			
	        else(선이 아닐 경우)
		        if(공격수라면)
			        if(우리편이 먹는다면 Q이상으로) 기루다 무늬가 아닌 그림중 가장 낮은 카드를 낸다.
			        else (우리편이 먹지 않는다면)
			        {				
				        if(내가 Q이상으로 이긴다면) 이기는 카드 중 가장 낮은 카드를 낸다.  
				        else if(무늬가 있다면)	가장 낮은 카드를 낸다.
				        else if(무늬가 없는 경우)
					        if(기루다가 4개이상 있다면) 기루다 중 가장 낮은 카드를 낸다.
					        else if(그림이 하나이상 나오고 기루다가 3개이상 있다면) 
						        기루다 중 가장 낮은 카드를 낸다.
					        else if(그림이 두개이상나오고 기루다가 2개 이상이면) 기루다 중 가장 낮은 카드를 낸다.
					        else if(그림이 세개이상 나오면) 기루다를 낸다.
				        else 가장 낮은 카드를 낸다.
			        }
		        else if(수비수라면)
		        {						
			        if(이긴다면)
				        if(내가 J이상으로 이긴다면) 가장 적은 걸 낸다.
				        else 이기는 숫자중 가장 적은 것을 낸다.
			        else if(공격수가 먹는다면) 가장 낮은 카드를 낸다.
			        else if(프랜드가 밝혀지지 않은 경우)
				        if(먹게 되는 사람이 카드를 3장이상 갖고있다면) 가장 작은 숫자를 낸다.
				        else 그림 중 약한 카드를 낸다.
			        else if(프랜드가 밝혀진 경우)
				        if(공격수가 먹는다면) 가장 낮은 카드를 낸다.
				        else 수비수가 먹는다면 그림중 가장낮은 카드를 낸다.			
		        }
             */ 
            foreach (HandedCard card in gameInfo.myCards)
            {
                if (card.isPossible) return card;
            }
            return null;
        }
        public override void RoundCompleteEvent()
        {

        }

        public override void GameEndEvent()
        {

        }
    }
}
